package hotel.quartz.oversea.job.meituan;

import hotel.base.oversea.constant.MeituanConstants;
import hotel.base.oversea.utils.DateUtil;
import hotel.base.oversea.utils.StringUtil;
import hotel.quartz.oversea.config.service.RedisService;
import hotel.quartz.oversea.job.base.BaseJob;
import hotel.quartz.oversea.job.task.MtHhbDownHotelsCheckUpTask;
import hotel.quartz.oversea.job.task.MtSaveLocalGoodsInfoTask;
import hotel.quartz.oversea.job.task.MtSaveLocalHotelDetailsTask;
import hotel.quartz.oversea.job.task.SwitchsPopGoodsAddTask;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.client.RestTemplate;

/**
 * <p>
 *  ’每天一次处理静态保存到库表定时器’处理数据   程序内部涉及：1、 产品静态数据
 *  ·                                                           2、酒店静态数据（酒店内部涉及物理房型静态数据）
 *                                                               3、产品新增 推送通知携程
 *                                                               4、每天一次查询酒店被主动下线的是否出现上线
 * </p>
 *
 * @description: Queue Pop Basic Save Mt Goods Info Job
 * @author: qiuyy
 * @date: 2020-05-26 13:22
 * @version: V1.0
 */
@Slf4j
public class QueuePopBasicSaveMtGoodsInfoJob implements BaseJob {
    private String timestamp = "Bmgicuj"+String.valueOf(System.currentTimeMillis())+ StringUtil.getFourRandom();
    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private RedisService redisService;
    @Autowired
    private SwitchsPopGoodsAddTask switchsPopGoodsAddTask;
    @Autowired
    private MtSaveLocalHotelDetailsTask mtSaveLocalHotelDetailsTask;
    @Autowired
    private MtHhbDownHotelsCheckUpTask mtHhbDownHotelsCheckUpTask;
    @Autowired
    private MtSaveLocalGoodsInfoTask mtSaveLocalGoodsInfoTask;

    /**
     *
     * 当前定时器  每天执行一次，，处理产品特定的静态信息更新保存到数据库中  --》数据来源：每两小时校验产品job
     *
     * @param jobExecutionContext
     */
    @Override
    @SneakyThrows
    public void execute(JobExecutionContext jobExecutionContext) {

        log.info("进入 QueuePopBasicSaveMtGoodsInfoJob  开始时间："+ DateUtil.getCurrTime());
        //1、早餐发送变化队列 推送携程   2020-11-24 暂时注释 携程早餐接口有变动
        /*if(null == redisService.get("QueuePopBasicSaveMtGoodsInfoJob_breakfast_close")){
            Long breakSize = redisService.queueSize(MeituanConstants.REDIS_QUEUE_HOTEL_BREAKFAST_JSON_KEY);
            if(breakSize==0){
                log.info("Queue Pop Basic Save Mt Goods Info Job {} >>>>>>>> 早餐队列size=0，不触发推送失效携程: {},{}",timestamp,DateUtil.getCurrTime());
            }else{
                switchsPopGoodsBreakfastTask.executeRequestBreakfast();
            }
        }*/
        //2、保存产品静态信息 每天一次
        if(null == redisService.get("QueuePopBasicSaveMtGoodsInfoJob_saveLocal_close")){
            Long breakSize = redisService.queueSize(MeituanConstants.REDIS_QUEUE_SAVE_BASIC_HOTEL_GOODS_INFO);
            if(breakSize==0){
                log.info("Queue Pop Basic Save Mt Goods Info Job {} >>>>>>>> 需保存产品信息队列size=0，不触发保存到数据库: {},{}",timestamp, DateUtil.getCurrTime());
            }else{
                mtSaveLocalGoodsInfoTask.executeSaveBasic();
            }
        }

        //3、新增产品队列 推送携程

        if(null == redisService.get("QueuePopBasicSaveMtGoodsInfoJob_requestAdd_close")){
            Long sizeAdd = redisService.queueSize(MeituanConstants.REDIS_QUEUE_HOTEL_ADD_GOODS_JSON_KEY);
            if(sizeAdd==0){
                log.info("Queue Pop Basic Save Mt Goods Info Job {} >>>>>>>> 新增队列size=0，不触发推送新增携程: {},{}",timestamp, DateUtil.getCurrTime());
            }else{
                switchsPopGoodsAddTask.executeRequestAdd();
            }
        }

        //4、保存酒店详情队列 （保存方法内部包含处理完酒店详情后，判断失效和新增产品房型id（因为真实房型id是酒店详情返回的）--》失效新增的房型push到队列--》半小时定时器会去处理）
        if(null == redisService.get("QueuePopBasicSaveMtGoodsInfoJob_hotelDetail_close")){
            Long sizeAdd = redisService.queueSize(MeituanConstants.REDIS_QUEUE_SAVE_BASIC_HOTEL_DETAILS_INFO);
            if(sizeAdd==0){
                log.info("Queue Pop Basic Save Mt Goods Info Job {} >>>>>>>> 酒店队列size=0: {},{}",timestamp, DateUtil.getCurrTime());
            }else{
                mtSaveLocalHotelDetailsTask.executeSaveDetailBasic();
            }
        }

        //5、每天一次校验过去一个月内 被程序判断下线的酒店是否上线了（程序根据酒店详情接口是否有数据判断为下线）
        if(null == redisService.get("QueuePopBasicSaveMtGoodsInfoJob_checkDownHotelsUp_close")){
            mtHhbDownHotelsCheckUpTask.executeDownCheckUp();
        }

        log.info("进入 QueuePopBasicSaveMtGoodsInfoJob  结束时间："+ DateUtil.getCurrTime());
    }



}
